{
  "bundles": [
    {
      "@type": "NXBundle",
      "artifactId": "nuxeo-routing-default",
      "artifactVersion": "9.10",
      "bundleGroup": {
        "@type": "NXBundleGroup",
        "bundleIds": [
          "org.nuxeo.ecm.platform.restapi.server.routing",
          "org.nuxeo.ecm.platform.routing.api",
          "org.nuxeo.ecm.platform.routing.core",
          "org.nuxeo.ecm.platform.routing.dashboard",
          "org.nuxeo.ecm.platform.routing.default",
          "org.nuxeo.ecm.platform.routing.default.jsf",
          "org.nuxeo.ecm.platform.routing.dm",
          "org.nuxeo.ecm.platform.routing.web"
        ],
        "hierarchyPath": "/grp:org.nuxeo.ecm.routing",
        "id": "grp:org.nuxeo.ecm.routing",
        "name": "org.nuxeo.ecm.routing",
        "parentIds": [],
        "readmes": [],
        "version": "9.10"
      },
      "bundleId": "org.nuxeo.ecm.platform.routing.default",
      "components": [
        {
          "@type": "NXComponent",
          "documentationHtml": "",
          "extensionPoints": [],
          "extensions": [
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.actions.ActionService--filters",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--filters",
              "id": "studio.extensions.nuxeo-routing-default--filters",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.actions.ActionService",
                "name": "org.nuxeo.ecm.platform.actions.ActionService",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"filters\" target=\"org.nuxeo.ecm.platform.actions.ActionService\">\n    <filter id=\"filter@wf@ParallelDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{!currentDocument.locked and currentDocument.currentLifeCycleState != 'approved' and currentDocument.currentLifeCycleState != 'deleted'}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n    <filter id=\"filter@SerialDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{currentDocument.currentLifeCycleState != 'approved' and currentDocument.currentLifeCycleState != 'deleted'}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--schema",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--schema",
              "id": "studio.extensions.nuxeo-routing-default--schema",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"schema\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <schema name=\"var_global_Task2169\" override=\"true\" prefix=\"var_global_Task2169\" src=\"data/schemas/var_global_Task2169.xsd\"/>\n    <schema name=\"var_Task2169\" override=\"true\" prefix=\"var_Task2169\" src=\"data/schemas/var_Task2169.xsd\"/>\n    <schema name=\"var_Task21a0\" override=\"true\" prefix=\"var_Task21a0\" src=\"data/schemas/var_Task21a0.xsd\"/>\n    <schema name=\"var_Task2225\" override=\"true\" prefix=\"var_Task2225\" src=\"data/schemas/var_Task2225.xsd\"/>\n    <schema name=\"var_Task22b4\" override=\"true\" prefix=\"var_Task22b4\" src=\"data/schemas/var_Task22b4.xsd\"/>\n    <schema name=\"var_Task232e\" override=\"true\" prefix=\"var_Task232e\" src=\"data/schemas/var_Task232e.xsd\"/>\n    <schema name=\"var_global_Task2556\" override=\"true\" prefix=\"var_global_Task2556\" src=\"data/schemas/var_global_Task2556.xsd\"/>\n    <schema name=\"var_Task2556\" override=\"true\" prefix=\"var_Task2556\" src=\"data/schemas/var_Task2556.xsd\"/>\n    <schema name=\"var_global_Task328d\" override=\"true\" prefix=\"var_global_Task328d\" src=\"data/schemas/var_global_Task328d.xsd\"/>\n    <schema name=\"var_Task328d\" override=\"true\" prefix=\"var_Task328d\" src=\"data/schemas/var_Task328d.xsd\"/>\n    <schema name=\"var_ParallelDocumentReview\" override=\"true\" prefix=\"var_ParallelDocumentReview\" src=\"data/schemas/var_ParallelDocumentReview.xsd\"/>\n    <schema name=\"var_Task375f\" override=\"true\" prefix=\"var_Task375f\" src=\"data/schemas/var_Task375f.xsd\"/>\n    <schema name=\"var_global_Task38e\" override=\"true\" prefix=\"var_global_Task38e\" src=\"data/schemas/var_global_Task38e.xsd\"/>\n    <schema name=\"var_Task38e\" override=\"true\" prefix=\"var_Task38e\" src=\"data/schemas/var_Task38e.xsd\"/>\n    <schema name=\"var_Task542\" override=\"true\" prefix=\"var_Task542\" src=\"data/schemas/var_Task542.xsd\"/>\n    <schema name=\"var_Task5c1\" override=\"true\" prefix=\"var_Task5c1\" src=\"data/schemas/var_Task5c1.xsd\"/>\n    <schema name=\"var_global_Task6d8\" override=\"true\" prefix=\"var_global_Task6d8\" src=\"data/schemas/var_global_Task6d8.xsd\"/>\n    <schema name=\"var_Task6d8\" override=\"true\" prefix=\"var_Task6d8\" src=\"data/schemas/var_Task6d8.xsd\"/>\n    <schema name=\"var_SerialDocumentReview\" override=\"true\" prefix=\"var_SerialDocumentReview\" src=\"data/schemas/var_SerialDocumentReview.xsd\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.runtime.services.resource.ResourceService--resources",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--resources",
              "id": "studio.extensions.nuxeo-routing-default--resources",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.runtime.services.resource.ResourceService",
                "name": "org.nuxeo.runtime.services.resource.ResourceService",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"resources\" target=\"org.nuxeo.runtime.services.resource.ResourceService\">\n    <resource name=\"NRD-PR-TasksInfo\">data/templates/NRD-PR-TasksInfo</resource>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.platform.routing.service--routeModelImporter",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--routeModelImporter",
              "id": "studio.extensions.nuxeo-routing-default--routeModelImporter",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.platform.routing.service",
                "name": "org.nuxeo.ecm.platform.routing.service",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"routeModelImporter\" target=\"org.nuxeo.ecm.platform.routing.service\">\n    <template-resource id=\"ParallelDocumentReview\" path=\"data/ParallelDocumentReview.zip\"/>\n    <template-resource id=\"SerialDocumentReview\" path=\"data/SerialDocumentReview.zip\"/>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--chains",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--chains",
              "id": "studio.extensions.nuxeo-routing-default--chains",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"chains\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <chain id=\"NRD-AC-PR-ChooseParticipants-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">NRD-AC-PR-LockDocument</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">initiatorComment</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"comment\"]</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-LockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param name=\"name\" type=\"string\">expr:workflowInitiator</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:Document.isLocked()?\"voidChain\":\"Document.Lock\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-UnlockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Unlock\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-ValidateNode-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">NRD-AC-PR-UnlockDocument</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">logInAudit</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-force-validate\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param name=\"name\" type=\"string\">expr:Context[\"workflowInitiator\"]</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">Consultation time excedeed</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">Some consultation tasks were aborted by the system as they received no feedback message.</param>\n      </operation>\n      <operation id=\"Workflow.ResumeNode\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-storeTaskInfo\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">This[0]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">tasksInfo</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberNA</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"NA\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberRejected</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"reject\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberApproved</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"approve\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">numberOfTasks</param>\n        <param name=\"value\" type=\"object\">expr:NodeVariables[\"numberOfTasks\"]</param>\n      </operation>\n      <operation id=\"Render.Document\">\n        <param name=\"template\" type=\"string\">template:NRD-PR-TasksInfo</param>\n        <param name=\"filename\" type=\"string\">output.ftl</param>\n        <param name=\"mimetype\" type=\"string\">text/xml</param>\n        <param name=\"type\" type=\"string\">ftl</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">review_result_file</param>\n        <param name=\"value\" type=\"object\">expr:This.get(0)</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param name=\"name\" type=\"string\">review_result</param>\n        <param name=\"value\" type=\"object\">expr:This.get(0).getString()</param>\n      </operation>\n    </chain>\n    <chain id=\"cancelWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Context.SetVar\">\n        <param name=\"name\" type=\"string\">isParallelWF</param>\n        <param name=\"value\" type=\"object\">expr:Event.context.getProperty(\"wfName\").equals(\"wf.parallelDocumentReview.ParallelDocumentReview\")?true:false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:isParallelWF?\"Document.Unlock\":\"voidChain\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"initInitiatorComment\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nWorkflowVariables[\"initiatorComment\"]= NodeVariables[\"comment\"];}</param>\n      </operation>\n    </chain>\n    <chain id=\"logInAudit\">\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">expr:NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">expr:@{nodeLastActor} @{NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"} the document with the following comment: @{NodeVariables[\"comment\"]}</param>\n      </operation>\n    </chain>\n    <chain id=\"nextAssignee\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if (NodeVariables[\"button\"] == \"validate\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] + 1;\n}\nelse if (NodeVariables[\"button\"] == \"reject\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] - 1;\n}\nelse if (NodeVariables[\"button\"] == \"submit\") {\n  WorkflowVariables[\"index\"] = 0;\n}</param>\n      </operation>\n    </chain>\n    <chain id=\"notifyInitiatorEndOfWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Mail\">\n        <param name=\"from\" type=\"string\">expr:Env[\"mail.from\"]</param>\n        <param name=\"message\" type=\"string\">The document was approved by every participant.</param>\n        <param name=\"subject\" type=\"string\">expr:@{Env[\"nuxeo.notification.eMailSubjectPrefix\"]} Document approved</param>\n        <param name=\"to\" type=\"stringlist\">expr:Fn.getEmail(workflowInitiator)</param>\n        <param name=\"HTML\" type=\"boolean\">false</param>\n        <param name=\"rollbackOnError\" type=\"boolean\">true</param>\n        <param name=\"viewId\" type=\"string\">view_documents</param>\n      </operation>\n    </chain>\n    <chain id=\"reinitAssigneeComment\">\n      <operation id=\"RunScript\">\n        <param name=\"script\" type=\"string\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nNodeVariables[\"comment\"]= null;}</param>\n      </operation>\n    </chain>\n    <chain id=\"terminateWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">logInAudit</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Context.RunDocumentOperationInNewTx\">\n        <param name=\"id\" type=\"string\">notifyInitiatorEndOfWorkflow</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n        <param name=\"rollbackGlobalOnError\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param name=\"id\" type=\"string\">expr:WorkflowVariables[\"validationOrReview\"] == \"validation\"?\"validateDocument\":\"voidChain\"</param>\n        <param name=\"isolate\" type=\"boolean\">false</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param name=\"event\" type=\"string\">Review completed successfully</param>\n        <param name=\"category\" type=\"string\">Review workflow</param>\n        <param name=\"comment\" type=\"string\">All the participants of the review have approved the document.</param>\n      </operation>\n    </chain>\n    <chain id=\"validateDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.FollowLifecycleTransition\">\n        <param name=\"value\" type=\"string\">approve</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param name=\"version\" type=\"string\">minor</param>\n        <param name=\"comment\" type=\"string\">Automatic checkin after validation</param>\n      </operation>\n    </chain>\n    <chain id=\"voidChain\">\n      <operation id=\"Context.FetchDocument\"/>\n    </chain>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.schema.TypeService--doctype",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--doctype",
              "id": "studio.extensions.nuxeo-routing-default--doctype",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.schema.TypeService",
                "name": "org.nuxeo.ecm.core.schema.TypeService",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"doctype\" target=\"org.nuxeo.ecm.core.schema.TypeService\">\n    <facet name=\"facet-var_global_Task2169\">\n      <schema name=\"var_global_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task2169\">\n      <schema name=\"var_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task21a0\">\n      <schema name=\"var_Task21a0\"/>\n    </facet>\n    <facet name=\"facet-var_Task2225\">\n      <schema name=\"var_Task2225\"/>\n    </facet>\n    <facet name=\"facet-var_Task22b4\">\n      <schema name=\"var_Task22b4\"/>\n    </facet>\n    <facet name=\"facet-var_Task232e\">\n      <schema name=\"var_Task232e\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task2556\">\n      <schema name=\"var_global_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_Task2556\">\n      <schema name=\"var_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task328d\">\n      <schema name=\"var_global_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_Task328d\">\n      <schema name=\"var_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_ParallelDocumentReview\">\n      <schema name=\"var_ParallelDocumentReview\"/>\n    </facet>\n    <facet name=\"facet-var_Task375f\">\n      <schema name=\"var_Task375f\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task38e\">\n      <schema name=\"var_global_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task38e\">\n      <schema name=\"var_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task542\">\n      <schema name=\"var_Task542\"/>\n    </facet>\n    <facet name=\"facet-var_Task5c1\">\n      <schema name=\"var_Task5c1\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task6d8\">\n      <schema name=\"var_global_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_Task6d8\">\n      <schema name=\"var_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_SerialDocumentReview\">\n      <schema name=\"var_SerialDocumentReview\"/>\n    </facet>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.cache.CacheService--caches",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--caches",
              "id": "studio.extensions.nuxeo-routing-default--caches",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.cache.CacheService",
                "name": "org.nuxeo.ecm.core.cache.CacheService",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"caches\" target=\"org.nuxeo.ecm.core.cache.CacheService\">\n    <cache name=\"vocab-WorkflowType-cache\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n    <cache name=\"vocab-WorkflowType-cache-without-references\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.core.operation.OperationServiceComponent--event-handlers",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--event-handlers",
              "id": "studio.extensions.nuxeo-routing-default--event-handlers",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "name": "org.nuxeo.ecm.core.operation.OperationServiceComponent",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"event-handlers\" target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\">\n    <handler chainId=\"cancelWorkflow\">\n      <event>workflowCanceled</event>\n    </handler>\n  </extension>"
            },
            {
              "@type": "NXContribution",
              "documentationHtml": "",
              "extensionPoint": "org.nuxeo.ecm.directory.GenericDirectory--directories",
              "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default/Contributions/studio.extensions.nuxeo-routing-default--directories",
              "id": "studio.extensions.nuxeo-routing-default--directories",
              "targetComponentName": {
                "rawName": "service:org.nuxeo.ecm.directory.GenericDirectory",
                "name": "org.nuxeo.ecm.directory.GenericDirectory",
                "type": "service"
              },
              "version": "9.10",
              "xml": "<extension point=\"directories\" target=\"org.nuxeo.ecm.directory.GenericDirectory\">\n    <directory extends=\"template-vocabulary\" name=\"WorkflowType\">\n      <autoincrementIdField>false</autoincrementIdField>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <table>studio_vocabulary_WorkflowType</table>\n      <dataFile>data/vocabularies/WorkflowType.csv</dataFile>\n      <cacheEntryName>vocab-WorkflowType-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>vocab-WorkflowType-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n  </extension>"
            }
          ],
          "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default/studio.extensions.nuxeo-routing-default",
          "name": "studio.extensions.nuxeo-routing-default",
          "requirements": [],
          "services": [],
          "version": "9.10",
          "xmlFileContent": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n<component name=\"studio.extensions.nuxeo-routing-default\" version=\"1.0.0\">\n\n  <extension target=\"org.nuxeo.runtime.services.resource.ResourceService\" point=\"resources\">\n    <resource name=\"NRD-PR-TasksInfo\">data/templates/NRD-PR-TasksInfo</resource>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"event-handlers\">\n    <handler chainId=\"cancelWorkflow\">\n      <event>workflowCanceled</event>\n    </handler>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.operation.OperationServiceComponent\" point=\"chains\">\n    <chain id=\"NRD-AC-PR-ChooseParticipants-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">NRD-AC-PR-LockDocument</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">initiatorComment</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"comment\"]</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-LockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param type=\"string\" name=\"name\">expr:workflowInitiator</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:Document.isLocked()?\"voidChain\":\"Document.Lock\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-UnlockDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Unlock\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-ValidateNode-Output\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">NRD-AC-PR-UnlockDocument</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">logInAudit</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"NRD-AC-PR-force-validate\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Auth.LoginAs\">\n        <param type=\"string\" name=\"name\">expr:Context[\"workflowInitiator\"]</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">Consultation time excedeed</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">Some consultation tasks were aborted by the system as they received no feedback message.</param>\n      </operation>\n      <operation id=\"Workflow.ResumeNode\"/>\n    </chain>\n    <chain id=\"NRD-AC-PR-storeTaskInfo\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">This[0]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">tasksInfo</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"]</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberNA</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"NA\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberRejected</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"reject\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberApproved</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"tasks\"].getNumberEndedWithStatus(\"approve\")</param>\n      </operation>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">numberOfTasks</param>\n        <param type=\"object\" name=\"value\">expr:NodeVariables[\"numberOfTasks\"]</param>\n      </operation>\n      <operation id=\"Render.Document\">\n        <param type=\"string\" name=\"template\">template:NRD-PR-TasksInfo</param>\n        <param type=\"string\" name=\"filename\">output.ftl</param>\n        <param type=\"string\" name=\"mimetype\">text/xml</param>\n        <param type=\"string\" name=\"type\">ftl</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">review_result_file</param>\n        <param type=\"object\" name=\"value\">expr:This.get(0)</param>\n      </operation>\n      <operation id=\"Context.SetWorkflowVar\">\n        <param type=\"string\" name=\"name\">review_result</param>\n        <param type=\"object\" name=\"value\">expr:This.get(0).getString()</param>\n      </operation>\n    </chain>\n    <chain id=\"cancelWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Context.SetVar\">\n        <param type=\"string\" name=\"name\">isParallelWF</param>\n        <param type=\"object\" name=\"value\">expr:Event.context.getProperty(\"wfName\").equals(\"wf.parallelDocumentReview.ParallelDocumentReview\")?true:false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:isParallelWF?\"Document.Unlock\":\"voidChain\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n    </chain>\n    <chain id=\"initInitiatorComment\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nWorkflowVariables[\"initiatorComment\"]= NodeVariables[\"comment\"];}</param>\n      </operation>\n    </chain>\n    <chain id=\"logInAudit\">\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">expr:NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">expr:@{nodeLastActor} @{NodeVariables[\"button\"] ==\"reject\"?\"chain.document.refused\":\"chain.document.validated\"} the document with the following comment: @{NodeVariables[\"comment\"]}</param>\n      </operation>\n    </chain>\n    <chain id=\"nextAssignee\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if (NodeVariables[\"button\"] == \"validate\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] + 1;\n}\nelse if (NodeVariables[\"button\"] == \"reject\") {\n  WorkflowVariables[\"index\"] = WorkflowVariables[\"index\"] - 1;\n}\nelse if (NodeVariables[\"button\"] == \"submit\") {\n  WorkflowVariables[\"index\"] = 0;\n}</param>\n      </operation>\n    </chain>\n    <chain id=\"notifyInitiatorEndOfWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.Mail\">\n        <param type=\"string\" name=\"from\">expr:Env[\"mail.from\"]</param>\n        <param type=\"string\" name=\"message\">The document was approved by every participant.</param>\n        <param type=\"string\" name=\"subject\">expr:@{Env[\"nuxeo.notification.eMailSubjectPrefix\"]} Document approved</param>\n        <param type=\"stringlist\" name=\"to\">expr:Fn.getEmail(workflowInitiator)</param>\n        <param type=\"boolean\" name=\"HTML\">false</param>\n        <param type=\"boolean\" name=\"rollbackOnError\">true</param>\n        <param type=\"string\" name=\"viewId\">view_documents</param>\n      </operation>\n    </chain>\n    <chain id=\"reinitAssigneeComment\">\n      <operation id=\"RunScript\">\n        <param type=\"string\" name=\"script\">if((NodeVariables[\"comment\"] != \"\") AND (NodeVariables[\"comment\"] != null)){\nNodeVariables[\"comment\"]= null;}</param>\n      </operation>\n    </chain>\n    <chain id=\"terminateWorkflow\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">logInAudit</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Context.RunDocumentOperationInNewTx\">\n        <param type=\"string\" name=\"id\">notifyInitiatorEndOfWorkflow</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n        <param type=\"boolean\" name=\"rollbackGlobalOnError\">false</param>\n      </operation>\n      <operation id=\"RunOperation\">\n        <param type=\"string\" name=\"id\">expr:WorkflowVariables[\"validationOrReview\"] == \"validation\"?\"validateDocument\":\"voidChain\"</param>\n        <param type=\"boolean\" name=\"isolate\">false</param>\n      </operation>\n      <operation id=\"Audit.LogEvent\">\n        <param type=\"string\" name=\"event\">Review completed successfully</param>\n        <param type=\"string\" name=\"category\">Review workflow</param>\n        <param type=\"string\" name=\"comment\">All the participants of the review have approved the document.</param>\n      </operation>\n    </chain>\n    <chain id=\"validateDocument\">\n      <operation id=\"Context.FetchDocument\"/>\n      <operation id=\"Document.FollowLifecycleTransition\">\n        <param type=\"string\" name=\"value\">approve</param>\n      </operation>\n      <operation id=\"Document.CheckIn\">\n        <param type=\"string\" name=\"version\">minor</param>\n        <param type=\"string\" name=\"comment\">Automatic checkin after validation</param>\n      </operation>\n    </chain>\n    <chain id=\"voidChain\">\n      <operation id=\"Context.FetchDocument\"/>\n    </chain>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.directory.GenericDirectory\" point=\"directories\">\n    <directory name=\"WorkflowType\" extends=\"template-vocabulary\">\n      <autoincrementIdField>false</autoincrementIdField>\n      <createTablePolicy>on_missing_columns</createTablePolicy>\n      <table>studio_vocabulary_WorkflowType</table>\n      <dataFile>data/vocabularies/WorkflowType.csv</dataFile>\n      <cacheEntryName>vocab-WorkflowType-cache</cacheEntryName>\n      <cacheEntryWithoutReferencesName>vocab-WorkflowType-cache-without-references</cacheEntryWithoutReferencesName>\n    </directory>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.cache.CacheService\" point=\"caches\">\n    <cache name=\"vocab-WorkflowType-cache\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n    <cache name=\"vocab-WorkflowType-cache-without-references\">\n      <option name=\"maxSize\">1000</option>\n      <option name=\"concurrencyLevel\">500</option>\n      <ttl>60</ttl>\n    </cache>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"schema\">\n    <schema name=\"var_global_Task2169\" prefix=\"var_global_Task2169\" override=\"true\" src=\"data/schemas/var_global_Task2169.xsd\"/>\n    <schema name=\"var_Task2169\" prefix=\"var_Task2169\" override=\"true\" src=\"data/schemas/var_Task2169.xsd\"/>\n    <schema name=\"var_Task21a0\" prefix=\"var_Task21a0\" override=\"true\" src=\"data/schemas/var_Task21a0.xsd\"/>\n    <schema name=\"var_Task2225\" prefix=\"var_Task2225\" override=\"true\" src=\"data/schemas/var_Task2225.xsd\"/>\n    <schema name=\"var_Task22b4\" prefix=\"var_Task22b4\" override=\"true\" src=\"data/schemas/var_Task22b4.xsd\"/>\n    <schema name=\"var_Task232e\" prefix=\"var_Task232e\" override=\"true\" src=\"data/schemas/var_Task232e.xsd\"/>\n    <schema name=\"var_global_Task2556\" prefix=\"var_global_Task2556\" override=\"true\" src=\"data/schemas/var_global_Task2556.xsd\"/>\n    <schema name=\"var_Task2556\" prefix=\"var_Task2556\" override=\"true\" src=\"data/schemas/var_Task2556.xsd\"/>\n    <schema name=\"var_global_Task328d\" prefix=\"var_global_Task328d\" override=\"true\" src=\"data/schemas/var_global_Task328d.xsd\"/>\n    <schema name=\"var_Task328d\" prefix=\"var_Task328d\" override=\"true\" src=\"data/schemas/var_Task328d.xsd\"/>\n    <schema name=\"var_ParallelDocumentReview\" prefix=\"var_ParallelDocumentReview\" override=\"true\" src=\"data/schemas/var_ParallelDocumentReview.xsd\"/>\n    <schema name=\"var_Task375f\" prefix=\"var_Task375f\" override=\"true\" src=\"data/schemas/var_Task375f.xsd\"/>\n    <schema name=\"var_global_Task38e\" prefix=\"var_global_Task38e\" override=\"true\" src=\"data/schemas/var_global_Task38e.xsd\"/>\n    <schema name=\"var_Task38e\" prefix=\"var_Task38e\" override=\"true\" src=\"data/schemas/var_Task38e.xsd\"/>\n    <schema name=\"var_Task542\" prefix=\"var_Task542\" override=\"true\" src=\"data/schemas/var_Task542.xsd\"/>\n    <schema name=\"var_Task5c1\" prefix=\"var_Task5c1\" override=\"true\" src=\"data/schemas/var_Task5c1.xsd\"/>\n    <schema name=\"var_global_Task6d8\" prefix=\"var_global_Task6d8\" override=\"true\" src=\"data/schemas/var_global_Task6d8.xsd\"/>\n    <schema name=\"var_Task6d8\" prefix=\"var_Task6d8\" override=\"true\" src=\"data/schemas/var_Task6d8.xsd\"/>\n    <schema name=\"var_SerialDocumentReview\" prefix=\"var_SerialDocumentReview\" override=\"true\" src=\"data/schemas/var_SerialDocumentReview.xsd\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.core.schema.TypeService\" point=\"doctype\">\n    <facet name=\"facet-var_global_Task2169\">\n      <schema name=\"var_global_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task2169\">\n      <schema name=\"var_Task2169\"/>\n    </facet>\n    <facet name=\"facet-var_Task21a0\">\n      <schema name=\"var_Task21a0\"/>\n    </facet>\n    <facet name=\"facet-var_Task2225\">\n      <schema name=\"var_Task2225\"/>\n    </facet>\n    <facet name=\"facet-var_Task22b4\">\n      <schema name=\"var_Task22b4\"/>\n    </facet>\n    <facet name=\"facet-var_Task232e\">\n      <schema name=\"var_Task232e\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task2556\">\n      <schema name=\"var_global_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_Task2556\">\n      <schema name=\"var_Task2556\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task328d\">\n      <schema name=\"var_global_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_Task328d\">\n      <schema name=\"var_Task328d\"/>\n    </facet>\n    <facet name=\"facet-var_ParallelDocumentReview\">\n      <schema name=\"var_ParallelDocumentReview\"/>\n    </facet>\n    <facet name=\"facet-var_Task375f\">\n      <schema name=\"var_Task375f\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task38e\">\n      <schema name=\"var_global_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task38e\">\n      <schema name=\"var_Task38e\"/>\n    </facet>\n    <facet name=\"facet-var_Task542\">\n      <schema name=\"var_Task542\"/>\n    </facet>\n    <facet name=\"facet-var_Task5c1\">\n      <schema name=\"var_Task5c1\"/>\n    </facet>\n    <facet name=\"facet-var_global_Task6d8\">\n      <schema name=\"var_global_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_Task6d8\">\n      <schema name=\"var_Task6d8\"/>\n    </facet>\n    <facet name=\"facet-var_SerialDocumentReview\">\n      <schema name=\"var_SerialDocumentReview\"/>\n    </facet>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.routing.service\" point=\"routeModelImporter\">\n    <template-resource id=\"ParallelDocumentReview\" path=\"data/ParallelDocumentReview.zip\"/>\n    <template-resource id=\"SerialDocumentReview\" path=\"data/SerialDocumentReview.zip\"/>\n  </extension>\n  <extension target=\"org.nuxeo.ecm.platform.actions.ActionService\" point=\"filters\">\n    <filter id=\"filter@wf@ParallelDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{!currentDocument.locked and currentDocument.currentLifeCycleState != 'approved' and currentDocument.currentLifeCycleState != 'deleted'}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n    <filter id=\"filter@SerialDocumentReview\">\n      <rule grant=\"true\">\n        <permission>ReadWrite</permission>\n        <type>Audio</type>\n        <type>File</type>\n        <type>Note</type>\n        <type>Picture</type>\n        <type>Video</type>\n        <condition>#{currentDocument.currentLifeCycleState != 'approved' and currentDocument.currentLifeCycleState != 'deleted'}</condition>\n      </rule>\n      <rule grant=\"false\">\n        <condition>document.isImmutable()</condition>\n      </rule>\n    </filter>\n  </extension>\n</component>\n",
          "xmlFileName": "/OSGI-INF/extensions.xml",
          "xmlPureComponent": true
        }
      ],
      "fileName": "nuxeo-routing-default-9.10.jar",
      "groupId": "org.nuxeo.ecm.routing",
      "hierarchyPath": "/grp:org.nuxeo.ecm.routing/org.nuxeo.ecm.platform.routing.default",
      "id": "org.nuxeo.ecm.platform.routing.default",
      "location": "",
      "manifest": "Manifest-Version: 1.0\r\nArchiver-Version: Plexus Archiver\r\nCreated-By: Apache Maven\r\nBuilt-By: jenkins\r\nBuild-Jdk: 1.8.0_77\r\nBundle-ManifestVersion: 2\r\nBundle-Version: 1.0.0\r\nBundle-Name: Nuxeo ECM Routing Default Workflows\r\nBundle-SymbolicName: org.nuxeo.ecm.platform.routing.default;singleton=\r\n true\r\nBundle-Vendor: Nuxeo\r\nNuxeo-Component: OSGI-INF/extensions.xml\r\n\r\n",
      "packages": [],
      "requirements": [],
      "version": "9.10"
    }
  ],
  "creationDate": 1664793304638,
  "key": "Nuxeo Platform LTS 2017-9.10",
  "name": "Nuxeo Platform LTS 2017",
  "operations": [],
  "packages": [],
  "pluginSnapshots": {},
  "releaseDate": 1515474000000,
  "version": "9.10"
}